package edu.scau.mis.pos.service;

import edu.scau.mis.pos.domain.Order;
import edu.scau.mis.pos.domain.VipItem;

import java.util.List;

/**
 * (Order)表服务接口
 *
 * @author CJW
 * @since 2024-04-04 00:21:48
 */
public interface IOrderService {

    /**
     * 通过ID查询单条数据
     *
     * @param orderId 主键
     * @return 实例对象
     */
    Order selectById(Long orderId);

    /**
     * 通过ID查询单条数据以完善Payment的需求
     *
     * @param orderId 主键
     * @return 实例对象
     */
    Order selectPayById(Long orderId);

    /**
     * 查询指定行数据
     *
     * @param order 筛选条件
     * @return 查询结果
     */
    List<Order> selectList(Order order);

    /**
     * 新增数据
     *
     * @param order 实例对象
     * @return 实例对象
     */
    Order insert(Order order);

    /**
     * 修改数据
     *
     * @param order 实例对象
     * @return 实例对象
     */
    Order update(Order order);

    /**
     * 通过主键批量删除数据
     *
     * @param orderId 主键
     * @return 影响记录数
     */
    int deleteByIds(Long[] orderId);

    /**
     * 创建订单，包括新增order和orderItem数据
     * @param order 实例对象
     */
    void createOrder(Order order);


    /**
     * 同时对order和orderItem进行逻辑删除
     * @param orderIds 主键
     */
    void deleteOrderItemsAndOrders(Long[] orderIds);
    void startOrderItemsAndOrders(Long[] orderIds);

    long count(Order order);

    List<Order> selectList(Order order, int start, int end);

    List<VipItem> useVip(Long orderId);
}
